using System;

namespace Test.ConsoleProgram.Algorithm.Solution
{
    [TestDescription("算法: 0696. 计数二进制子串")]
    public class No0696_CountBinarySubstrings : AbsBaseTestItem
    {
        /*
        给定一个字符串 s，计算具有相同数量0和1的非空(连续)子字符串的数量，并且这些子字符串中的所有0和所有1都是组合在一起的。
        重复出现的子串要计算它们出现的次数。
        */

        public override void OnTest()
        {
            Assert.TestExe(CountBinarySubstrings, "00110011", 6);
            Assert.TestExe(CountBinarySubstrings, "10101", 4);
        }

        public int CountBinarySubstrings(string s)
        {
            int ptr = 0, n = s.Length, last = 0, ans = 0;
            while (ptr < n)
            {
                char c = s[ptr];
                int count = 0;
                while (ptr < n && s[ptr] == c)
                {
                    ++ptr;
                    ++count;
                }
                ans += Math.Min(count, last);
                last = count;
            }
            return ans;
        }
    }
}
